package com.medical.medicalmodulecommon.api;

import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;

/**
 * 文件服务接口 - 对外暴露的API
 */
public interface FileService {

    /**
     * 上传文件
     * @param inputStream 文件流
     * @param objectName 对象名称
     * @param contentType 文件类型
     * @param fileSize 文件大小
     * @return 文件访问URL
     */
    String uploadFile(InputStream inputStream, String objectName,
                      String contentType, long fileSize);
    /**
     * 上传文件 - （自动处理MultipartFile）
     */
    String uploadFile(MultipartFile file, String objectName);

    /**
     * 上传文件 - （使用原始文件名）
     */
    String uploadFile(MultipartFile file);
    /**
     * 下载文件
     * @param objectName 对象名称
     * @return 文件流
     */
    InputStream downloadFile(String objectName);

    /**
     * 获取文件访问URL
     * @param objectName 对象名称
     * @return 文件访问URL
     */
    String getFileUrl(String objectName);

    /**
     * 删除文件
     * @param objectName 对象名称
     * @return 是否删除成功
     */
    boolean removeObject(String objectName);

    /**
     * 文件是否存在
     * @param objectName 对象名称
     * @return 是否存在
     */
    boolean objectExist(String objectName);

    /**
     * 获取文件信息
     * @param objectName 对象名称
     * @return 文件信息
     */
    Object getObjectInfo(String objectName);

    ResponseEntity<Resource> downloadFileAsResponse(String objectName);
}